home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2109 / 2109.xpi / chrome / febe.jar / content / febeScheduleBackup.js < prev    next >
Text File  |  2009-10-13  |  18KB  |  473 lines

  1. // author: Chuck Baker
  2. // contact: febe@customsoftwareconsult.com
  3. // Version 6.3
  4.  
  5.     var febeBackupInProgress = Boolean(false);        // Is a backup currently running?
  6.     var febeScheduledBackupID = new Number;            // PID of scheduled backup
  7.     var febeScheduledWarningID = new Number;        // PID of scheduled backup warning
  8.     var febeNextBackup = new String();                // Text description of next scheduled backup
  9.     var febeSchedule = new String()                    // Scheduled backup frequency
  10.     var febeIsScheduled = Boolean(false)            // Is a backup scheduled?
  11.     var febeSetTimeoutID = [];                        // Array holing settimeout ids
  12.     var febeDailyHour = new Number;                    // Hour(00 - 23) of daily backup
  13.     var febeDailyMinute = new Number;                // Minute (0 - 55) of daily backup, 5 min increments
  14.     var febeWeeklyDay = new Number;                    // Day of week (sun=0 ... sat=6) of daily backup
  15.     var febeWeeklyHour = new Number;                // Hour(00 - 23) of weekly backup
  16.     var febeWeeklyMinute = new Number;                // Minute (0 - 55) of weekly backup, 5 min increments
  17.     var febeMonthlyDay = new Number;                // Day of month (1 - 28) of monthly backup
  18.     var febeMonthlyHour = new Number;                // Hour(00 - 23) of monthly backup
  19.     var febeMonthlyMinute = new Number;                // Minute (0 - 55) of monthly backup, 5 min increments
  20.     var febeNB = new Date();                        // Next backup date
  21.     var febeScheduledBuTimer;                        // nsITimer object
  22.  
  23. function febeScheduledBuTimerInit(delay){
  24.     febeSetMsgs();
  25.     if(febeIsScheduled == true){
  26.         var prefName = "extensions.febe.schedule.description";
  27.         febeNextBackup = febeLocalizedDate(febeNB);
  28.         febeSetUnicharPref(prefName,febeNextBackup);
  29.         febeSetStatus();
  30.         var d = document.getElementById("nextbackupdate");
  31.         if(d) d.value= febeLocalizedDate(febeNB);
  32.     }else{
  33.         document.getElementById("nextbackupdate").value = febeMsg[113];
  34.         if(febeScheduledBuTimer) febeScheduledBuTimer.cancel();
  35.         return false;
  36.     }//if
  37.     febeScheduledBuTimer.initWithCallback(febeStartScheduledBackup, delay, Ci.nsITimer.TYPE_ONE_SHOT);
  38.     return true;
  39. }//febeScheduledBuTimerInit()
  40.  
  41. function febeCheckForMissedScheduledBackup(){
  42.     if(!febeIsScheduleController){return false}    // This window is not the controller
  43.  
  44.   // Was the scheduled backup missed?  Test date: Thu Sep 25 2008 21:41:40 GMT-0700 (US Mountain Standard Time)
  45.       if(febePrefs.getCharPref("extensions.febe.schedule.frequency") == "none") {return true;}    // No backup scheduled    
  46.     if(febePrefs.getBoolPref("extensions.febe.dontaskagain") == true) {return true;}            // Asked and answered
  47.     var nextBU = Date.parse(febeNextBackup);
  48.     var now = Date.parse(Date());
  49.  
  50.     var prefName = "extensions.febe.lastbackup";
  51.     if(isNaN(nextBU)){  // Garbage in lastbackup pref?
  52.         if(febePrefs.prefHasUserValue(prefName)){febePrefs.clearUserPref(prefName);}
  53.         febeNextBackup = "";
  54.         return true;
  55.     }//if
  56.     
  57.     if(!febePrefs.prefHasUserValue(prefName)){return true;}    // No last backup - must be a new install
  58.     var lastBU = Date.parse(febePrefs.getCharPref(prefName));    
  59.     if(lastBU > nextBU ){    // Scheduled backup already occured (probably in a different window).  Reschedule and return
  60.         febeScheduleBackup();
  61.         return true;
  62.     }//if    
  63.     if(nextBU >= now){return true;}    // Scheduled backup was not missed
  64.     
  65.     // Backup was missed!  Ask to perform now
  66.     if(febeMsg[234] == "undefined") {return false;}    // Probably just restarted - it will check again after everything gets loaded
  67.     febeSetMsgs();
  68.     if(febeBuInProgress()){return false;}
  69.     if(febeWin.name == "FEBE Confirm"){return false;}    // Already prompting
  70.     
  71.     // Don't ask more than once every 15 minutes - It is possible that the user scheduled a new backup between the last notice and now.
  72.     // We also have to allow for the possiblility that the computer is in sleep mode for more that one scheduled backup period.
  73.     var now1 = Date();
  74.     var now = Date.parse(now1);
  75.     if ((now - 900000) < febeSkippedScheduledLastChecked){return true;}    // 900,000 milliseconds is 15 minutes
  76.     var tmp = "<style>color: red; font-weight: bold; font-size: 15px;</style>"+febeMsg[234]+"\n";
  77.     tmp += "<style>color: black; margin: 0px 0px 0px 30px;</style>"+febeMsg[235]+"\n";
  78.     tmp += "<style>color: purple; font-weight: bold; margin: 0px 0px 0px 30px;</style>"+febeLocalizedDate(nextBU)+"\n";
  79.     tmp += "<style>color: black; margin: 0px 0px 10px 30px;</style>"+febeMsg[236]+"\n";
  80.     tmp += "<style>color: black; font-weight: bold; font-size: 15px;</style>"+febeMsg[233]+"\n\n";
  81.     tmp += "<style>color: black;</style>"+febeMsg[273]+febePrefs.getCharPref(prefName)+" ("+lastBU+")\n";
  82.     tmp += "<style>color: black;</style>"+febeMsg[274]+febeNextBackup+" ("+nextBU+")\n";
  83.     tmp += "<style>color: black;</style>"+febeMsg[275]+now1+" ("+now+")\n";
  84.     
  85.     if(febeConfirmAsk(tmp)){
  86.         febePrefs.setBoolPref("extensions.febe.backupInProgress",false);
  87.         setTimeout('febeInit()',3000);
  88.     }//if
  89.     febeSkippedScheduledLastChecked = Date.parse(Date());
  90.     return true;
  91. }//febeCheckForMissedScheduledBackup()
  92.     
  93. function febeScheduleBackup(){
  94.     if(!Boolean(febeControllerWindow)){febeScheduleController();}
  95.     if(!febeSetIsScheduled()){return false;}    // No backup is scheduled
  96.     if(!febeIsScheduleController){return false}    // This window is not the controller
  97.     
  98.   // Determine when (or if) a scheduled backup will take place and put it in the queue
  99.     if(febeBuInProgress()){
  100.         if(!febeBuInProgressCheck()) {return false;}
  101.     }//if
  102.     febeSetTimeoutID = [];
  103.     if(!febeScheduleInit()){return;}
  104.     
  105.     var now = new Date().getTime();    // Current time in milliseconds    
  106.     var oneDay = 24 * 60 * 60 * 1000;    // One day in milliseconds
  107.     var oneMinute = 60 * 1000;
  108.     var tmp = new Number;
  109.     febeNB = new Date();
  110.     febeNB.setSeconds(0);
  111.     var d = new Date();
  112.     switch(febeSchedule){
  113.         case "daily":
  114.             febeNB.setHours(febeDailyHour);
  115.             febeNB.setMinutes(febeDailyMinute);
  116.             febeWait = febeNB.getTime() - now;
  117.             if(febeWait <= 0){            // Scheduled time already passed
  118.                 tmp = febeNB.getTime();
  119.                 tmp += oneDay;        // Add a day
  120.                 febeNB.setTime(tmp);    
  121.                 febeWait = febeNB.getTime() - now;
  122.             }//if
  123.             break;
  124.         case "weekly":
  125.             var today = d.getDay();
  126.             tmp = today * oneDay;
  127.             d.setTime(now-tmp);
  128.             d.setHours(0,0,0);        // Last Sunday, Midnight
  129.             var sunday = d.getTime();
  130.             tmp = febeWeeklyDay * oneDay;
  131.             febeNB.setTime(sunday + tmp);
  132.             febeNB.setHours(febeWeeklyHour);
  133.             febeNB.setMinutes(febeWeeklyMinute);
  134.             febeWait = febeNB.getTime() - now;
  135.             if(febeWait <= 0){            // Scheduled time already passed
  136.                 tmp = febeNB.getTime();
  137.                 tmp += (oneDay * 7);// Add a week
  138.                 febeNB.setTime(tmp);    
  139.                 febeWait = febeNB.getTime() - now;
  140.             }//if
  141.             break;
  142.         case "monthly":
  143.             febeNB.setDate(febeMonthlyDay);
  144.             febeNB.setHours(febeMonthlyHour);
  145.             febeNB.setMinutes(febeMonthlyMinute);
  146.             febeWait = febeNB.getTime() - now;
  147.             if(febeWait <= 0){            // Scheduled time already passed
  148.                 var numDaysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
  149.                 numDaysInMonth[1] += febeLeapYear();    // Leap year fix
  150.                 var thisMonth = d.getMonth();
  151.                 var nextMonth = thisMonth + 1;
  152.                 if(nextMonth == 12){nextMonth = 0};
  153.                 var dayOfMonth = d.getDate();
  154.                 var daysLeftThisMonth = numDaysInMonth[thisMonth] - dayOfMonth; 
  155.                 tmp = (daysLeftThisMonth +1) * oneDay;
  156.                 febeNB.setTime(now + tmp);
  157.                 febeNB.setHours(0,0,0);        // First day of next month at Midnight
  158.                 febeNB.setDate(febeMonthlyDay);
  159.                 febeNB.setHours(febeMonthlyHour);
  160.                 febeNB.setMinutes(febeMonthlyMinute);
  161.                 febeWait = febeNB.getTime() - now;
  162.             }//if
  163.             break;
  164.         default:
  165.             febeSchedule = "none";
  166.             febeIsScheduled = false;
  167.             break;
  168.     }//switch
  169.     febeWait -= oneMinute;    // Start the warning one minute prior to backup
  170.     febeScheduledBuTimerInit(febeWait);
  171. }//febeScheduleBackup()
  172.  
  173. function febeStartScheduledBackup(){
  174.     if(!febeIsScheduleController) {return true;}    // Only the controlling window can initiate a backup
  175.     febeWarn();
  176.     // Save process id in case user aborts
  177.     var to = new febeSetTimeoutObj;
  178.     to.PID = setTimeout(febeInit, 60000);
  179.     to.Process = 'febeInit()';
  180.     febeSetTimeoutID.push(to);
  181.     return true;
  182. }//febeStartScheduledBackup()
  183.  
  184. function febeScheduleInit(){
  185.     // Get daily time info
  186.     var prefName = "extensions.febe.schedule.daily.hour";
  187.     if(febePrefs.prefHasUserValue(prefName)){
  188.         febeDailyHour = febePrefs.getIntPref(prefName);
  189.     } else {
  190.         febePrefs.setIntPref(prefName,1);
  191.         febeDailyHour = 1;
  192.     }//if
  193.     var prefName = "extensions.febe.schedule.daily.minute";
  194.     if(febePrefs.prefHasUserValue(prefName)){
  195.         febeDailyMinute = febePrefs.getIntPref(prefName);
  196.     } else {
  197.         febePrefs.setIntPref(prefName,0);
  198.         febeDailyMinute = 0;
  199.     }//if
  200.  
  201.     // Get weekly time info
  202.     var prefName = "extensions.febe.schedule.weekly.day";
  203.     if(febePrefs.prefHasUserValue(prefName)){
  204.         febeWeeklyDay = febePrefs.getIntPref(prefName);
  205.     } else {
  206.         febePrefs.setIntPref(prefName,0);
  207.         febeWeeklyDay = 0;
  208.     }//if
  209.     var prefName = "extensions.febe.schedule.weekly.hour";
  210.     if(febePrefs.prefHasUserValue(prefName)){
  211.         febeWeeklyHour = febePrefs.getIntPref(prefName);
  212.     } else {
  213.         febePrefs.setIntPref(prefName,1);
  214.         febeWeeklyHour = 1;
  215.     }//if
  216.     var prefName = "extensions.febe.schedule.weekly.minute";
  217.     if(febePrefs.prefHasUserValue(prefName)){
  218.         febeWeeklyMinute = febePrefs.getIntPref(prefName);
  219.     } else {
  220.         febePrefs.setIntPref(prefName,0);
  221.         febeWeeklyMinute = 0;
  222.     }//if
  223.  
  224.     // Get monthly time info
  225.     var prefName = "extensions.febe.schedule.monthly.day";
  226.     if(febePrefs.prefHasUserValue(prefName)){
  227.         febeMonthlyDay = febePrefs.getIntPref(prefName);
  228.     } else {
  229.         febePrefs.setIntPref(prefName,1);
  230.         febeMonthlyDay = 1;
  231.     }//if
  232.     var prefName = "extensions.febe.schedule.monthly.hour";
  233.     if(febePrefs.prefHasUserValue(prefName)){
  234.         febeMonthlyHour = febePrefs.getIntPref(prefName);
  235.     } else {
  236.         febePrefs.setIntPref(prefName,1);
  237.         febeMonthlyHour = 1;
  238.     }//if
  239.     var prefName = "extensions.febe.schedule.monthly.minute";
  240.     if(febePrefs.prefHasUserValue(prefName)){
  241.         febeMonthlyMinute = febePrefs.getIntPref(prefName);
  242.     } else {
  243.         febePrefs.setIntPref(prefName,0);
  244.         febeMonthlyMinute = 0;
  245.     }//if
  246.  
  247.     // Get scheduled backup frequency
  248.     var prefName = "extensions.febe.schedule.frequency";
  249.     if(febePrefs.prefHasUserValue(prefName)){
  250.         febeSchedule = febePrefs.getCharPref(prefName);
  251.     } else {
  252.         febePrefs.setCharPref(prefName,"none");
  253.         febeSchedule = "none";
  254.     }//if
  255.     febeSetIsScheduled();
  256.     febeSetStatus();
  257.     return febeIsScheduled;
  258. }//febeScheduleInit()
  259.  
  260. function febeSetIsScheduled(){
  261.     // Set scheduled backup string
  262.     var prefName = "extensions.febe.schedule.description";
  263.     if(febeGetUnicharPref("extensions.febe.schedule.frequency") == "none"){
  264.         febeIsScheduled = false;
  265.         febeSchedule = "none";
  266.         febeSetUnicharPref(prefName,febeMsg[113]);
  267.         febeNextBackup = febeMsg[113];
  268.     }else{
  269.         febeNextBackup = febeGetUnicharPref(prefName);
  270.         febeIsScheduled = true;
  271.     }//if;
  272.     return febeIsScheduled;
  273. }//febeSetIsScheculed()
  274.  
  275. function febeScheduleController(){
  276.   // Check to see if this is the schedule controlling window
  277.     febeIsScheduleController = false;
  278.     febeHideIcons = febePrefs.getBoolPref("extensions.febe.hideIcons");
  279.     // How many windows are open?
  280.     var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
  281.     var wincnt = 0;
  282.     var winarray = [];
  283.     var enumerator = wm.getEnumerator("navigator:browser");
  284.     while(enumerator.hasMoreElements()) {
  285.         var win = enumerator.getNext();
  286.         wincnt++;
  287.         winarray[wincnt] = win;
  288.     }//while
  289.     if(wincnt == 1){    // Only one window (this one) is opened
  290.         febeIsScheduleController = true;
  291.         febeControllerWindow = window;
  292.         febeSetStatus();
  293.         winarray = [];    // Free up memory
  294.         return true;
  295.     }//if
  296.     // More than one window is open ... see if any are the controller
  297.     var contIndex = 0;
  298.     for(var i=1; i<=wincnt; i++){
  299.         var d = winarray[i].document.getElementById("febestatusbar");
  300.         if(winarray[i].febeIsScheduleController){
  301.             contIndex = i;
  302.             d.hidden = febeHideIcons;
  303.             d.collapsed = febeHideIcons;
  304.         }else{
  305.             winarray[i].febeIsScheduleController = false;
  306.             d.hidden = true;
  307.             d.collapsed = true;
  308.         }//if
  309.     }//for
  310.     if(contIndex == 0){    // No controller set, make it this one
  311.         febeIsScheduleController = true;
  312.         document.getElementById("febestatusbar").hidden = febeHideIcons;
  313.         document.getElementById("febestatusbar").collapsed = febeHideIcons;
  314.         febeControllerWindow = window;
  315.     }else{
  316.         winarray[contIndex].febeIsScheduleController = true;
  317.         winarray[contIndex].document.getElementById("febestatusbar").hidden = febeHideIcons;
  318.         winarray[contIndex].document.getElementById("febestatusbar").collapsed = febeHideIcons;
  319.         febeControllerWindow = winarray[contIndex];
  320.     }//if
  321.     winarray = [];        // Free up memory
  322.     return true;
  323. }//febeScheduleController()
  324.  
  325. function febeScheduleChange(){
  326.     febeScheduleInit();
  327.     switch(febeSchedule){
  328.         case "daily":
  329.             febeDisableDaily(false);
  330.             febeDisableWeekly(true);
  331.             febeDisableMonthly(true);        
  332.             febeDisableScheduleInfo(false);    
  333.             break;
  334.         case "weekly":
  335.             febeDisableDaily(true);
  336.             febeDisableWeekly(false);
  337.             febeDisableMonthly(true);        
  338.             febeDisableScheduleInfo(false);    
  339.             break;
  340.         case "monthly":
  341.             febeDisableDaily(true);
  342.             febeDisableWeekly(true);
  343.             febeDisableMonthly(false);
  344.             febeDisableScheduleInfo(false);        
  345.             break;
  346.         case "none":
  347.             febeDisableDaily(true);
  348.             febeDisableWeekly(true);
  349.             febeDisableMonthly(true);
  350.             febeDisableScheduleInfo(true);            
  351.             break;
  352.     }//switch
  353. }//febeScheduleChange()
  354.  
  355. function febeDisableDaily(state){
  356.     document.getElementById("dailylabelID").disabled = state;
  357.     document.getElementById("dailyHourID").disabled = state;
  358.     document.getElementById("dailyMinuteID").disabled = state;
  359. }//febeDisableDaily()
  360.  
  361. function febeDisableWeekly(state){
  362.     document.getElementById("weeklylabelID").disabled = state;
  363.     document.getElementById("weeklylabelatID").disabled = state;
  364.     document.getElementById("weeklyDayID").disabled = state;
  365.     document.getElementById("weeklyHourID").disabled = state;
  366.     document.getElementById("weeklyMinuteID").disabled = state;
  367. }//febeDisableWeekly()
  368.  
  369. function febeDisableMonthly(state){
  370.     document.getElementById("monthlylabelID").disabled = state;
  371.     document.getElementById("monthlylabelatID").disabled = state;
  372.     document.getElementById("monthlyDayID").disabled = state;
  373.     document.getElementById("monthlyHourID").disabled = state;
  374.     document.getElementById("monthlyMinuteID").disabled = state;
  375. }//febeDisableDaily()
  376.  
  377. function febeDisableScheduleInfo(state){
  378.     //document.getElementById("setschedulebtn").disabled = state;
  379.     document.getElementById("setschedulelbl").disabled = state;
  380.     document.getElementById("nextbackupdate").disabled = state;
  381.     document.getElementById("nextbackupdate").value=febeMsg[113];
  382. }//febeDisableDaily()
  383.  
  384. function febeSetScheduleBtn(){
  385.     febeScheduleInit();
  386.     febeScheduleBackup();
  387.     febeGetPlatform();
  388.     if(febePlatform == 3){// Mac can't handle modal alerts properly, so just assume they clicked "OK"
  389.         alert(febeMsg[183]);
  390.         febeRestartFx();
  391.     }else{    
  392.         var tmp="<style>color: purple; font-weight: bold; font-size: 15px;</style>"+febeMsg[228];
  393.         if(febeConfirm(tmp)){febeRestartFx();}
  394.     }//if
  395.     return true;
  396. }//febeSetScheduleBtn()
  397.  
  398. function febeSetStatus(){
  399.  // Set statusbar icon
  400.      if(febeHideIcons){return true;}
  401.     if(!Boolean(febeControllerWindow)){febeScheduleController();}
  402.     var d = febeControllerWindow.document.getElementById("febestatusbar");
  403.     if(!Boolean(d)){return false;}
  404.     febeSetMsgs();
  405.     febeSetIsScheduled();
  406.     febeLocalizedDate(febeNextBackup);
  407.     if(febeIsScheduled){
  408.         d.setAttribute("status","normal");
  409.         var tmp = febeMsg[114] + febeNextBackup;
  410.     }else{
  411.         d.setAttribute("status","nobackup");
  412.         var tmp = febeMsg[113];
  413.     }//if
  414.     d.tooltipText = tmp;
  415.     return true;
  416. }//febeSetStatus()
  417.  
  418. function febeLeapYear(){
  419.   // returns 1 if now is a leap year, 0 otherwise 
  420.     var retval = 0;
  421.     var now = new Date();
  422.     var year = now.getFullYear();
  423.     
  424.     if(year % 4 == 0){
  425.         if(year % 100 != 0){
  426.             retval = 1;
  427.         }else{
  428.             if(year % 400 == 0){
  429.                 retval = 1;
  430.             }else{
  431.                 retval = 0;
  432.             }
  433.         }
  434.     }
  435.     return retval;
  436. }//febeLeapYear()
  437.  
  438. function febeDisplayLastBU(){
  439.     febeInitDir();
  440.     var febeResultsPage = FEBEdir.clone();
  441.     febeResultsPage.append("FEBEresults.html");
  442.     var results = false;
  443.     if(febeResultsPage.exists()) results = true;
  444.     var prefName = "extensions.febe.lastbackup";
  445.     if(febePrefs.prefHasUserValue(prefName)){
  446.         var tmp = febePrefs.getCharPref(prefName);
  447.         tmp = febeLocalizedDate(tmp);
  448.         document.getElementById("viewlastbudir").disabled = false;
  449.         document.getElementById("viewlastbupage").disabled = !results;
  450.     } else {
  451.         var tmp = febeMsg[173];
  452.         document.getElementById("viewlastbudir").disabled = true;
  453.         document.getElementById("viewlastbupage").disabled = true;
  454.     }//if
  455.     document.getElementById("febeLastBU").value = tmp;
  456.     document.getElementById("febeLastBuType").value = febeGetUnicharPref("extensions.febe.lastbackup.Type");
  457.     return true;
  458. }//febeDisplayLastBU()
  459.  
  460. function febeViewLastBUdir(){
  461.     var prefName = "extensions.febe.lastbackup.folder";
  462.     if(febePrefs.prefHasUserValue(prefName)){
  463.         var febeBuDestDir = febePrefs.getCharPref(prefName);
  464.         febeOpenLink("file:///"+febeBuDestDir);
  465.     }//if
  466.     return true;
  467. }//febeViewLastBU()
  468.  
  469. function febeViewLastBUpage(){
  470.     febeOpenLink("chrome://febe/content/febeResultsLoad.html");
  471.     return true;
  472. }//febeViewLastBUpage()
  473. //alert("febeScheduleBackup.js");